

package TagServer::Portal;


#UML_MODELER_BEGIN_PERSONAL_VARS_Portal

#UML_MODELER_END_PERSONAL_VARS_Portal

use TagServer::Empresa;
use TagServer::Fornecedor;
use TagClient::VarsSend;

use CGI;

use base qw( TagServer::Control );



=head1 PORTAL

Dispatcher que retorna dados para .
Decende de Control, usa interface iServer.

=cut


=head1 PUBLIC ATTRIBUTES

=pod 



=cut



=head3 Portal->cgi($new_cgi)

   Parameters :
      new_cgi : $ : The gateway interface, of type CGI

   Return : 
      $ : the _cgi attrib 

   Description : 
     The cgi ambient.
     $tela = new CGI;
     $portal = new TagServer::Portal();
     $portal->cgi($tela);

=cut

sub cgi {
   warn "Metodo Portal->cgi\n";	
   my $self = shift;
   if (@_) { $self->{_cgi} = shift }
   $self->evt($self->{_cgi}->param("evt")) unless $self->{_evt};
   $self->what($self->{_cgi}->param("what")) unless $self->{_what};
   return $self->{_cgi};
}




=head1 PUBLIC METHODS

=pod 

=head4 ->new()

   Return : 
	The class instance      

   Description : 
      The constructor

=cut

sub new
{
  my $this = shift;
  my $class = ref($this) || $this; 
  my $self = {
  _evt  => undef,
  _what => undef,
  _view => undef,
  _cgi => undef,
  _model => undef,
  _user => undef,
  _url => undef,
  _dataHandle => undef,
  };
  warn "Construtor: Sou o Portal\n";
  bless ($self, $class); 
  return $self;
}


=head3 login

   Parameters :
      user : TagServer::Empresa : The empresa loging in.

   Return : 
      

   Description : 
      A login procedure.

=cut

sub login
{
  my($self,
     $user, # TagServer::Empresa : The empresa loging in.
    ) = @_;
#UML_MODELER_BEGIN_PERSONAL_CODE_login
#UML_MODELER_END_PERSONAL_CODE_login
}

=head3 Portal->update($new_model)

   Parameters :
      new_model : $ : The model to update

   Return : 
      $ : the _model attrib

   Description : 
      Do a update in the observer by the new_model
=cut

sub update {
   warn "Metodo Portal->update\n";	
   my $self = shift;
   if (@_) { $self->{_model} = shift }
   warn $self->model;
   $self->model->update;
   warn "Notify observer:\n";
   $self->model->notify($self->view);
   return $self->{_model};
}





=head3 Control->onEvt($evt, $what)

   Parameters :
      evt : $ : The event
      what : $ : what to do

   Return : 
      % : the iModel and iView instances 

   Description : 
      Do what in that event

=cut

sub onEvt
{
  my $self = shift;
    
    my $nothing;
    if (@_) { 
      $self->what(shift);
      $self->evt(shift);
    }
    warn "Metodo Portal->onEvt\n";
    
    $_ = $self->evt;
     
     SWITCH: {
               /^cadastra/      && do {
                                   warn ("evt = cadastra\n");
				   for ($self->what){
   /fornecedor/ && do {
	   warn "what = fornecedor\n";
	   # View é VarsSend para se comunicar com o swf
	   # link com meu cgi

	   $self->view(
		   TagClient::VarsSend->new
	   		)->cgi($self->cgi);

	   # Init do model com novo Fornecedor (observer é VarsSend)
	   # variaveis cgi sao os dados a cadastrar/receber, via flash

   	   my %data = $self->cgi->Vars;
	   my $refdata = \%data;
	   warn "CGI: ".$self->cgi->Vars;
	   # My view is a observer of Fornecedor
	   $self->model(
		   $self->view->model(TagServer::Fornecedor->new)
	   		)->data($refdata);

	   warn "Data1 recebe data de empresa\n";
	   my $refdata2 = $self->model->data;
	my %data1 = %$refdata2;
	   warn $refdata2; 
	   warn %data1; 
   foreach my $chave (keys %data1 ){
	   my $valor = $data1{$chave};
	   warn "$chave: $valor";
   }

	   # entao criamos um fornecedor com os dados enviados pelo cgi
	   # para em seguida fazer o update (salva no BD e notify view)
   
	   # update no model/view 
	   # cadastra o Fornecedor e VarsSend retorna variaveis para o swf

	   $self->update;
	   last;
					   };
					   /cliente/ && do {
						   warn "cliente\n";
						   last;
					   }; 
					   /pessoa/ && do {
						   warn "pessoa\n";
						   last;
					   }; 
					   /produto/ && do {
						   warn "produto\n";
						   last;
					   };
 
              $nothing = 1;
				   }

                                   last SWITCH;
                              };

               /^edita/      && do {
                                   warn ("editando..\n");
				   for ($self->what){
					   /fornecedor/ && do {
						   warn "fornecedor\n";
						   last;
					   };
					   /cliente/ && do {
						   warn "cliente\n";
						   last;
					   };
					   /pessoa/ && do {
						   warn "pessoa\n";
						   last;
					   }; 
					   /produto/ && do {
						   warn "produto\n";
						   last;
					   };
 
              $nothing = 1;
				   }

                                   last SWITCH;
                              };

               /^deleta/      && do {
                                   warn ("deletando..\n");
				   for ($self->what){
					   /fornecedor/ && do {
						   warn "fornecedor\n";
						   last;
					   };
					   /cliente/ && do {
						   warn "cliente\n";
						   last;
					   };
					   /pessoa/ && do {
						   warn "pessoa\n";
						   last;
					   }; 
					   /produto/ && do {
						   warn "produto\n";
						   last;
					   };
 
              $nothing = 1;
				   }

                                   last SWITCH;
                               };
               /^mostra/      && do {
                                   warn ("mostrando..\n");
				   for ($self->what){
					   /fornecedor/ && do {
						   warn "fornecedor\n";
						   last;
					   };
					   /cliente/ && do {
						   warn "cliente\n";
						   last;
					   };
					   /pessoa/ && do {
						   warn "pessoa\n";
						   last;
					   }; 
					   /produto/ && do {
						   warn "produto\n";
						   last;
					   };
 
              $nothing = 1;
				   }

                                   last SWITCH;
                               };
              $nothing = 1;
           }

	   if ($nothing) {
		   warn "Redirect to index\n";
	   	   # do a redirect to index FIXME deveria estar no config
		   print $self->cgi->redirect('http://www.tagfashion.com.br/');
	   }

    return 1;

}




=cut


=head1 METHODS FOR SUBCLASSING



=cut


=head1 PRIVATE METHODS



=cut






return 1;
